package br.com.foxinline.manager.iptu;

import br.com.foxinline.modelo.Bairro;
import br.com.foxinline.modelo.Imovel;
import br.com.foxinline.servico.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author gabriel
 */
@ManagedBean
@ViewScoped
public class ManagerPendenciasIPTU {
    public static final String AREA = "Area";
    public static final String DIMENSAO = "Dimensao";
    public static final String PROPRIETARIO = "Proprietário";
    public static final String TESTADA = "Testada";
    public static final String UNIDADE = "Unidade";
    @EJB
    private ImovelServico imovelServico;
    @EJB
    private IptuServico iptuServico;
    @EJB
    private DadosIptuServico dadosIptuServico;
    @EJB
    private ConfigIptuServico configIptuServico;
    @EJB
    BairroServico bairroService;
    
    private Bairro bairro;
    private List<String> selectedOptions;
    private static final String pendenteProprietario = "i.proprietarios is empty";
    private static final String pendenteDimensao = "i.dimensoes is null";
    private static final String pendenteArea = "d.areaTerreno is null";
    private static final String pendenteUnidade = "d.areaUnidade is null";
    private static final String pendenteTestada = "d.testadaImovel is null";
    private List<Imovel> resultPendentes;
    
    @PostConstruct
    public void init() {
        selectedOptions = new ArrayList<String>();
    }
    
    public void imovelPendente() {
        String query=" ( "+ pendenteProprietario + " or "+ pendenteDimensao + " or "+ pendenteArea + " or "+ pendenteUnidade + " or "+ pendenteTestada + " )";
        
        if(selectedOptions.size() > 0){
            query = " ( ";
            int i = 0;
            for (String opt : selectedOptions) {
                if (opt.equals(PROPRIETARIO)) {
                    query += pendenteProprietario;
                }else if(opt.equals(DIMENSAO)){
                    query += pendenteDimensao;
                }else if(opt.equals(AREA)){
                    query += pendenteArea;
                }else if(opt.equals(UNIDADE)){
                    query += pendenteUnidade;
                }else if(opt.equals(TESTADA)){
                    query += pendenteTestada;
                }
                i++;
                if(i < selectedOptions.size()){
                    query += " or ";
                }else{
                    query += " )";
                }
            }
        }
        
//       resultPendentes = imovelServico.imovelPendenteIPTU(bairro,query);
    }
    
    public String pendencias(Imovel item) {
        List<String> pendencias = new ArrayList<String>();
        String pendencia = "";
        
        if (item.getProprietarios() == null || item.getProprietarios().isEmpty()) {
            pendencias.add("não existe proprietário");
        }
        if ( item.getDimensoes() == null) {
            pendencias.add("não contem dimensões do imovel");
        }else{
            if( item.getDimensoes().getAreaTerreno() == null){
                pendencias.add("não possui area do terreno");
            }
            if(item.getDimensoes().getAreaUnidade() == null){
                pendencias.add("não contem area unidade");
            }
            if(item.getDimensoes().getTestadaImovel() == null){
                pendencias.add("sem Testada do imovel");
            }
        }
        
        for (int i = 0; i < pendencias.size(); i++) {

            if (pendencias.size() > 1 && i > 0) {
                if (i < pendencias.size() - 1) {
                    pendencia += ", ";
                } else {
                    pendencia += " e ";
                }
            }
            pendencia += pendencias.get(i);
        }

        return pendencia += ".";
    }
    
    public HashMap<String, String> getTipoPendencia() {

        HashMap<String, String> tipoPendencia = new HashMap<String, String>();
        tipoPendencia.put(PROPRIETARIO, PROPRIETARIO);
        tipoPendencia.put(DIMENSAO, DIMENSAO);
        tipoPendencia.put(AREA, AREA);
        tipoPendencia.put(UNIDADE, UNIDADE);
        tipoPendencia.put(TESTADA, TESTADA);

        return tipoPendencia;
    }
    
    public Bairro getBairro() {
        return bairro;
    }

    public void setBairro(Bairro bairro) {
        this.bairro = bairro;
    }
    
    public List<Bairro> getBairros() {
        List<Bairro> selectItems = new ArrayList<Bairro>();

        for (Bairro b : bairroService.findAll()) {
            selectItems.add(b);
        }
        return selectItems;
    }

    public List<Imovel> getResultPendentes() {
        return resultPendentes;
    }

    public List<String> getSelectedOptions() {
        return selectedOptions;
    }

    public void setSelectedOptions(List<String> selectedOptions) {
        this.selectedOptions = selectedOptions;
    }
     
}
